#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "config_parse.h"
#include "link_list.h"
#include "random_access.h"
#include "log_record.h"
#include "sequence_access.h"

int main(int argc, const char *argv[]){
    if(1 != argc){
        printf("Usage : 固定用法 [%s]\n", argv[0]);
        exit(EXIT_FAILURE);
    }
    // 设置随机终止
    srand(time(NULL));

    // 获取环境变量 NAME_FIND_HOME 的值
    char env_app_home[128] = {0};
    char *p = getenv("NAME_FIND_HOME");
    if(NULL == p){
        printf("未检测到环境变量 NAME_FIND_HOME, 请配置\n");
        exit(EXIT_FAILURE);
    }
    strcpy(env_app_home, p); // 保存环境变量的值

    // 获取 名单文件 的配置项 
    char  name_lisi_file[128] = {0};
    config_get_value(env_app_home, "CHOOSE_NAME_FILE", name_lisi_file);
    if('\0' == name_lisi_file[0]){
        printf("CHOOSE_NAME_FILE 配置项没有值, 请检查\n");
        exit(EXIT_FAILURE);
    }
    // 获取 点名方式 的配置项 
    char  choose_name_mode[128] = {0};
    config_get_value(env_app_home, "CHOOSE_NAME_MODE", choose_name_mode);
    if('\0' == choose_name_mode[0]){
        printf("CHOOSE_NAME_MODE 配置项没有值, 请检查\n");
        exit(EXIT_FAILURE);
    }

    // printf("名单文件是[%s]\n", name_lisi_file);
    // 将名单文件中的名字添加到链表中
    node_t *phead = NULL;
    create_node(&phead);
    load_name(env_app_home, name_lisi_file, phead);
    
    // 测试
    // node_t *ptemp = phead->next;
    // while(NULL != ptemp){
    //     printf("%s  ", ptemp->name);
    //     ptemp = ptemp->next;
    // }
    // printf("    %d\n", *(int *)phead->name);

    //printf("点名方式是[%s]\n", choose_name_mode); // rand

    char choose_name[32] = {0};
    if(!strcmp(choose_name_mode, "rand")){ // 随机点名
        get_rand_name(choose_name, phead);
    }else if(!strcmp(choose_name_mode, "sequence")){ // 顺序点名
        get_sequence_name(env_app_home, name_lisi_file, choose_name, phead);
    }
    printf("请 [%s] 来回答问题\n", choose_name);

    // 记录日志
    write_log(env_app_home, choose_name);

    return 0;
}